Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Enterprise JavaBeans</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Enterprise_JavaBeans"> <link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Enterprise_JavaBeans rootpage-Enterprise_JavaBeans skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span lang="en">Enterprise JavaBeans</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr"><p>
<b><span class="lang-en" lang="en">Enterprise JavaBeans</span></b> (<b>EJB</b>) est une architecture de <a href="Composant_logiciel" title="Composant logiciel">composants logiciels</a> côté <a href="Serveur_informatique" title="Serveur informatique">serveur</a> pour la plateforme de développement <a href="Java_EE" class="mw-redirect" title="Java EE">Java EE</a>.
</p><p>Cette architecture propose un cadre pour créer des composants distribués (c’est-à-dire déployés sur des serveurs distants) écrit en langage de programmation <a href="Java_(langage)" title="Java (langage)">Java</a> hébergés au sein d'un <a href="Serveur_d'applications" title="Serveur d'applications">serveur applicatif</a> permettant de représenter des données (EJB dit <i>entité</i>), de proposer des services avec ou sans conservation d'état entre les appels (EJB dit <i>session</i>), ou encore d'accomplir des tâches de manière asynchrone (EJB dit <i>message</i>). Tous les EJB peuvent évoluer dans un contexte <a href="Transaction_informatique" title="Transaction informatique">transactionnel</a>.
</p><p>De la version 1.0 à la version 2.1, un EJB était accompagné d'un ou plusieurs fichiers de déploiement écrits en <a href="Extensible_Markup_Language" title="Extensible Markup Language">XML</a> qui permettait au serveur applicatif de déployer correctement l'<a href="Objet_(informatique)" title="Objet (informatique)">objet</a> au sein d'un conteneur. C'était notamment dans ces fichiers de déploiement que le développeur avait la possibilité de préciser le cadre transactionnel dans lequel l'objet allait s'exécuter. Depuis la version 3.0, le modèle EJB utilise le principe d'<a href="Annotation_(Java)" title="Annotation (Java)">annotation Java</a> (meta-données) pour spécifier toute la configuration et les propriétés transactionnelles de l'objet. Le fichier de <a href="Code_source" title="Code source">code source</a> de l'EJB se suffit à lui-même.
</p><p>C'est le serveur applicatif qui est chargé de la création, la destruction, la passivation ou l'activation de ses composants en fonction des besoins. Le client via un appel <a href="Remote_method_invocation_(Java)" class="mw-redirect" title="Remote method invocation (Java)">RMI</a> (ou une de ses dérivées) va rechercher un EJB par son nom logique <a href="Java_Naming_and_Directory_Interface" title="Java Naming and Directory Interface">JNDI</a> et appeler une ou plusieurs <a href="M%C3%A9thode_(informatique)" title="Méthode (informatique)">méthodes</a> de cet objet.
</p>

<div class="mw-heading mw-heading2"><h2 id="Les_EJB_session_(Session_Bean)"><span id="Les_EJB_session_.28Session_Bean.29"></span>Les EJB <i>session</i> (<span class="lang-en" lang="en">Session Bean</span>)</h2></div>
<p>Les EJB sessions sont des objets proposant des services à leur appelant. Ils proposent un certain nombre de méthodes écrites par le développeur. Il y a deux types d'EJB <i>session</i>&nbsp;: les EJB sessions ne conservant pas leur état entre deux appels (EJB dit «&nbsp;<i><span class="lang-en" lang="en">stateless</span></i>&nbsp;»), et ceux le conservant (EJB dit «&nbsp;<i><span class="lang-en" lang="en">stateful</span></i>&nbsp;»). Il n'y a aucune garantie qu'entre deux appels au même EJB l'instance de l'objet soit la même.
</p>
<div class="mw-heading mw-heading3"><h3 id="Stateless_Session_Bean"><span class="lang-en" lang="en">Stateless Session Bean</span></h3></div>
<p>La particularité principale d'un <span class="lang-en" lang="en">Stateless Session Bean</span> est de ne pas conserver d'état entre les différents appels.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="nd">@Stateless</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">StatelessSessionBeanImpl</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">StatelessSessionBean</span><span class="w"> </span><span class="p">{</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">sayHello</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="s">"Hello!"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Stateful_Session_Bean"><span class="lang-en" lang="en">Stateful Session Bean</span></h3></div>
<p>La particularité principale d'un <span class="lang-en" lang="en">Stateful Session Bean</span> est de conserver son état entre différents appels de méthodes.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="nd">@Stateful</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">StatefulSessionBeanImpl</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">StatefulSessionBean</span><span class="w"> </span><span class="p">{</span>

<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">user</span><span class="p">;</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">login</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">user</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">user</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">sayHello</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">user</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="s">"Hello world&nbsp;!"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="s">"Hello "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">user</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">"&nbsp;!"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Les_EJB_entité"><span id="Les_EJB_entit.C3.A9"></span>Les EJB <i>entité</i></h2></div>
<p>Les EJB <i>entité</i> sont des <i><span class="lang-en" lang="en">beans</span></i> ayant majoritairement pour vocation d'être persistants, c'est-à-dire pouvant être stockés sur un support physique entre deux sessions.<br>Les EJB <i>entité</i> peuvent être de deux sortes&nbsp;: BMP (<i><span class="lang-en" lang="en">Bean Managed Persistence</span></i>) ou CMP (<i><span class="lang-en" lang="en">Container Managed Persistence</span></i>) (voir <a href="Java_Persistence_API" class="mw-redirect" title="Java Persistence API">Java Persistence API</a>).
</p><p>Les EJB BMP sont des <i><span class="lang-en" lang="en">beans</span></i> dont la persistance a dû être programmée par le développeur (ce dernier doit respecter un format pour la classe et les méthodes à implémenter sont imposées par la norme).
</p><p>Les EJB CMP sont eux des <i><span class="lang-en" lang="en">beans</span></i> dont la persistance est directement assurée par le conteneur d'EJB&nbsp;; le <a href="Data_mapping" title="Data mapping">mapping</a> entre l'objet et son support de persistance est indiqué au conteneur via les fichiers descripteurs de déploiement. Le développeur, une fois le fichier de déploiement réalisé, n'a pas besoin d'écrire le code de persistance.
</p><p>Depuis la version 3.0 de la spécification EJB, la notion de <span class="lang-en" lang="en">bean</span> BMP/CMP n'existe plus&nbsp;: les EJB <i>entité</i> sont directement liés à la base de données via un <a href="Mapping_objet-relationnel" title="Mapping objet-relationnel">mapping objet-relationnel</a>. Ce mapping est défini soit dans un <a href="Fichier_de_configuration" title="Fichier de configuration">fichier de configuration</a> XML, ou directement dans le code Java en utilisant des annotations.
</p><p>Cette nouvelle <a href="Interface_de_programmation" title="Interface de programmation">interface de programmation</a> des EJB <i>entité</i> est appelée <a href="Java_Persistance_API" class="mw-redirect" title="Java Persistance API">Java Persistance API</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Les_EJB_message">Les EJB <i>message</i></h2></div>
<p>Depuis la norme EJB 2.0 (2015) , cette architecture propose un troisième type de composant&nbsp;: les EJB <i>message</i> permettant de déclencher un processus côté serveur applicatif lors de la publication d'un message asynchrone. Pour ces composants, le client ne s'adresse pas directement aux composants mais publie un message sur un réceptacle <a href="Java_Message_Service" title="Java Message Service">JMS</a> (<i>queue</i> ou <i>topic</i>) configuré sur le serveur applicatif qui va alors déclencher l'activation par ce serveur d'une instance de l'EJB concerné pour pouvoir traiter ce message.
</p>
<div class="mw-heading mw-heading2"><h2 id="Voir_aussi">Voir aussi</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Article_connexe">Article connexe</h3></div>
<ul><li><a href="Java_Data_Object" class="mw-redirect" title="Java Data Object">Java Data Object</a> (JDO)</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Liens_externes">Liens externes</h3></div>
<ul><li><a rel="nofollow" class="external text" href="http://java.developpez.com/cours/?page=java-ee-cat#ejb">Cours et tutoriels sur les EJB</a></li></ul>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la programmation informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2022-05-12" href="https://fr.wikipedia.org/wiki/?title=Enterprise_JavaBeans&amp;oldid=193639900">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>